import FileTypeChecker from '../services/FileTypeChecker';
import { parseDocumentMetaFromJSX } from './parseDocumentMeta';
import { getDocument } from '@/utils/editor-adapter/editorResource';

export const getFileInfoFromPath = function (path: string, content?: string, projectId?: string) {
  const splits = path.split('/');
  const fileName = splits[splits.length - 1];
  const fileNameSplits = fileName.split('.');
  const folder = splits.slice(0, splits.length - 1).join('/');

  let name: string;
  let desc: string;
  let extName: string;

  // 检查是否是旧格式的文件名（包含中文描述）
  if (fileNameSplits.length >= 3) {
    // 可能是旧格式：[desc].[name].[ext] 或 [desc].[name].[subext].[ext]
    const possibleDesc = fileNameSplits[0];
    const possibleName = fileNameSplits[1];

    // 如果第一部分包含中文字符，认为是旧格式
    if (/[\u4e00-\u9fff]/.test(possibleDesc)) {
      desc = possibleDesc;
      name = possibleName;
      extName = fileNameSplits.slice(2).join('.');
    } else {
      // 新格式：name.subext.ext
      name = fileNameSplits[0];
      desc = name; // 默认使用文件名作为描述，实际描述从文件内容中获取
      extName = fileNameSplits.slice(1).join('.');
    }
  } else if (fileNameSplits.length === 2) {
    // 简单文件名：name.ext
    name = fileNameSplits[0];
    desc = name; // 默认使用文件名作为描述，实际描述从文件内容中获取
    extName = fileNameSplits[1];
  } else {
    // 没有扩展名的文件
    name = fileNameSplits[0];
    desc = name;
    extName = '';
  }

  // 如果传入了文件内容，尝试从内容中解析更准确的描述信息
  if (content) {
    try {
      // 对于 Markdown 文件，从内容中提取标题
      if (extName === 'md') {
        const lines = content.trim().split('\n');
        const firstLine = lines[0].trim();

        // 检查首行是否是 # 开头的标题
        if (firstLine.startsWith('#')) {
          // 提取 # 后面的内容作为标题
          desc = firstLine.replace(/^#+\s*/, '').trim();
        }
      }
      // 对于代码文件，尝试从 JSDoc 注释中提取标题作为描述
      else if (
        extName === 'tsx' ||
        extName === 'jsx' ||
        extName === 'doc' ||
        extName.includes('ts') ||
        extName.includes('js')
      ) {
        const parsedMeta = parseDocumentMetaFromJSX(content);
        if (parsedMeta.title) {
          desc = parsedMeta.title;
        }
      }
    } catch (error) {
      console.warn('Failed to parse meta from content:', path, error);
    }
  }
  // 注意：如果没有传入 content 参数，desc 将使用默认值（文件名或旧格式的描述）
  // 调用方应该尽量传入 content 参数以获得准确的描述信息

  const type = getFileTypeByExtName(extName, name, projectId);
  // console.log('getFileInfoFromPath: ', extName, {
  //   type,
  //   desc,
  //   name,
  //   folder,
  // });
  return {
    path,
    type,
    desc,
    name,
    extName,
    folder,
  };
};

export const getFileTypeByExtName = function (
  extName: string,
  fileName: string,
  projectId?: string,
): string {
  // 优先从文件类型配置获取
  const fileTypeConfig = FileTypeChecker.getTypeByExtension(extName);
  if (fileTypeConfig) {
    return fileTypeConfig.type;
  }

  // 特殊处理 TSX 和 DOC 文件
  switch (extName) {
    case 'tsx':
      // const doc1 = getDocument(fileName, projectId);
      // return doc1?.type || 'Page';
      return 'Page';
    case 'doc':
      return 'Page';
    // const doc2 = getDocument(fileName, projectId);
    // return doc2?.type || 'Page';
    case 'css':
      return 'css';
    case 'md':
      return 'code';
    default:
      // 回退到硬编码映射
      const fileTypeMap = {
        'api.ts': 'api',
        'm.ts': 'vo',
        'node.ts': 'cloud_function',
        tsx: 'Page', // 改为tsx
        'action.ts': 'action',
        'action.js': 'action',
        'util.ts': 'action',
        'util.js': 'action',
        'utils.ts': 'action',
      };
      return fileTypeMap[extName];
  }
};
